\documentclass[E:/GsjzTle/main/main.tex]{subfiles}
\begin{document}

\begin{itemize}
\item
  有两个自然数 \(A\) 和 \(B\)，S 是 \(A^B\) 的所有约数之和
\item
  求 \(S\bmod9901\)
\end{itemize}

\(A^B\)的约数之和
\(= (1+p1^1+p1^2+.....+p1^{B*c1})×(1+p2^1+.....+p2^{B×c2} × ...\)

\begin{lstlisting}
const int N = 3e5 + 10;
const int mod = 9901;
pair<int , int>a[N];
signed main()
{
	int A , b , cnt = 0;
	cin >> A >> b;
	if(!A) return cout << 0 << '\n' , 0;
	else if(!b) return cout << 1 << '\n' , 0;
	for(int i = 2 ; i * i <= A ; i ++)
	{
		if(A % i == 0)
		{
			int c = 0;
			while(A % i == 0) A /= i , c ++;
			a[++ cnt] = make_pair(i , c);
		}
	}
	if(A > 1) a[++ cnt] = make_pair(A , 1);
	int res = 1;
	rep(i , 1 , cnt)
	{
		int n = a[i].se * b + 1 , p = a[i].fi;
		int x = (pow_mod(p , n , mod) - 1 + mod) % mod;
		int y = (pow_mod(a[i].fi - 1 , mod - 2 , mod) + mod) % mod;
		if(!x) res *= n;  // 当公差为 1 时 , sum = n * a1(不过此题不会有这种情况)
		else
		{
			res *= x , res %= mod;
			res *= y , res %= mod;
		}
	}
	cout << (res + mod) % mod << '\n';
	return 0;
}
\end{lstlisting}

\end{document}
